/**
 * Clase PantallaMenuPrincipal: el Menu Principal de la aplicacion movil para medicos
 */

package infbmobile.pantallas;

// Importaciones externas
import java.io.*;
import java.util.*;
import com.sun.lwuit.*;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.plaf.Style;
import com.sun.lwuit.events.ActionListener;

// Importaciones internas
import infbmobile.almacenamiento.Identificacion;
import infbmobile.main.*;
import infbmobile.util.*;
import infbmobile.errores.*;


public class PantallaMenuPrincipal extends Form implements ActionListener {
    // Referencia al midlet principal
    public InfBMobileMedico midlet;

    // Atributos de clase
    // Nombre de todas las pantallas que forman el menu principal
    public static String[] pantallas=new String[]{"Citas","Medicamentos","Simulador","MisPacientes"};

    // Hash de asociacion de botones a pantallas
    private Hashtable hashBotonesPantallas;
    private int numFilas;
    private int numColumnas;
    private Command comandoSalir;
    private Command comandoAbout;
    

    /**
     * Constructor principal de la clase
     */
    public PantallaMenuPrincipal(InfBMobileMedico midlet) {
        super("Menu Principal - HospiGest Medicos");
        this.midlet=midlet;
        // Creamos el hastable de botones a pantallas
        hashBotonesPantallas=new Hashtable();
        // Ancho maximo de un boton (abajo explicado) y ancho de la pantalla
        int anchoMaxBoton=0;
        int anchoPantalla=Display.getInstance().getDisplayWidth();
        // Creamos arrays con las imagenes que tendran los botones de opcion de menu
        // cuando esten seleccionados (in) y no seleccionados (out)
        Image[] iconosIn=new Image[pantallas.length];
        Image[] iconosOut=new Image[pantallas.length];
        // Cargamos los iconos
        for(int i=0;i<pantallas.length;i++){
            // Obtenemos las imagenes de los iconos
            try{
                iconosIn[i]=Image.createImage("/res/iconos/"+pantallas[i]+"_IN.png");
                iconosOut[i]=Image.createImage("/res/iconos/"+pantallas[i]+"_OUT.png");
            }catch(IOException ioe){
                ioe.printStackTrace();
            }
            // Creamos el boton con el icono
            Button boton=new Button(pantallas[i],iconosOut[i]);
            // Modificamos la aparencia del boton
            Style estiloBoton=boton.getStyle();
            estiloBoton.setBorder(null);
            estiloBoton.setBgTransparency(0);
            // Centramos el texto del boton y lo posicionamos debajo de la imagen
            boton.setAlignment(Label.CENTER);
            boton.setTextPosition(Label.BOTTOM);
            // Establecemos la imagen a mostrar cuando el icono sea seleccionado
            boton.setRolloverIcon(iconosIn[i]);
            boton.addActionListener(this);
            // Creamos la asociacion del boton a la pantalla
            hashBotonesPantallas.put(boton,pantallas[i]);
            // Agregamos el boton al formulario
            addComponent(boton);
            anchoMaxBoton=Math.max(boton.getPreferredW(),anchoMaxBoton);
        }
        // Ya una vez acabado el bucle de carga de iconos procemos
        // a fijar las dimensiones de la reticula de pantalla
        numColumnas=anchoPantalla / anchoMaxBoton;
        numFilas=pantallas.length / numColumnas;
        setLayout(new GridLayout(numFilas,numColumnas));
        // Agregamos los comandos
        comandoSalir=new Command("Salir");
        addCommand(comandoSalir);
        comandoAbout=new Command("About");
        addCommand(comandoAbout);
        setCommandListener(this);
    }

    /**
     * Metodo auxiliar para cargar una pantalla concreta desde el menu central
     * de la aplicacion movil para medicos
     * @param pantalla El nombre de la pantalla a cargar
     */
    private void cargarPantalla(String pantalla) {
        if(pantalla.equalsIgnoreCase("Citas")){
            // Mostramos la pantalla de citas
             midlet.mostrarPantallaCitas();
        }else if(pantalla.equalsIgnoreCase("Medicamentos")){
            // Mostramos la pantalla de busqueda de medicamentos
            midlet.mostrarPantallaBusquedaMedicamentos();
        }else if(pantalla.equalsIgnoreCase("Simulador")){
            // Mostramos la pantalla del simulador
            midlet.mostrarPantallaSimulador();
        }else if(pantalla.equalsIgnoreCase("MisPacientes")){
            // Mostramos la pantalla del simulador
            midlet.mostrarPantallaBusquedaMisPacientes();
        }
        
        // Asi con todas las pantallas que vayamos creando
    }

    public void actionPerformed(ActionEvent evento) {
        Object fuente=evento.getSource();
        // Recogemos los eventos
        if(fuente==comandoSalir){
            midlet.salir();
        }else if(fuente==comandoAbout){
            UIHerramientas.mostrarAviso("About HospiGest Mobile","Version 1.0\n Desarrollado por el grupo INFB");
        }else{
            // Detectamos el icono pulsado
            String pantalla=(String)hashBotonesPantallas.get(fuente);
            cargarPantalla(pantalla);
        }

    }

}
